package net.dotool;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author 李岩飞
 * @email eliyanfei@126.com	
 * 2018年1月15日 下午2:12:49
 * 
 */
public class ClassTools {
	/**
	 * 对象拷贝，只拷贝set和get方法的属性 
	 * @param obj
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T copy(T obj) {
		T copy = null;
		try {
			Class<?> clazz = obj.getClass();
			copy = (T) clazz.newInstance();
			Field[] fields = clazz.getDeclaredFields();
			for (Field f : fields) {
				try {
					PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
					Method rM = pd.getReadMethod();//获得读方法  
					Method wM = pd.getWriteMethod();//获得读方法  
					Object v = rM.invoke(obj);
					wM.invoke(copy, v);
				} catch (Exception e) {
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return copy;
	}
}
